package org.example;

import java.util.Arrays;

public class Test3 {
    //leetcode 213 打家劫舍II https://leetcode.cn/problems/house-robber-ii/description/

    public int rob(int[] nums) {
        //根据第一间房子和最后一间房子的状态将这个问题分为三种情况
        //1. 第一间房子偷，最后一间房子不偷，那么我们需要考虑的范围就是第1到n-1间房子
        //2. 第一间房子不偷，最后一间房子偷，需要考虑的方位就是第2到n间房子
        //3. 第一间房子和最后一间房子都不偷，需要考虑的范围时第2到n-1间房子
        //第三种情况可以在第1和第2种情况中考虑到，因为只是考虑第1到n-1个房子和考虑第2和第n个房子的
        //最高金额情况，那么第一间和最后一间房子不一定一定会偷
        int n = nums.length;
        if (n == 1) return nums[0];
        return Math.max(rob1(Arrays.copyOfRange(nums,0,n-1)),rob1(Arrays.copyOfRange(nums,1,n)));
    }

    public int rob1(int[] nums) {
        int n = nums.length;
        int[][] dp = new int[n+1][2];
        //dp[i][0]表示第i个房子偷时的最高金额，dp[i][1]表示第i个房子不=不偷时候的最高金额
        for (int i = 1; i <= n; i++) {
            dp[i][0] = dp[i-1][1] + nums[i-1];
            dp[i][1] = Math.max(dp[i-1][0],dp[i-1][1]);
        }
        return Math.max(dp[n][0],dp[n][1]);
    }

    public static void main(String[] args) {
        int[] nums = {1,2,3,4,5};
        int[] tmp = Arrays.copyOfRange(nums,0,nums.length-1);
        for (int n : tmp) System.out.println(n);
    }
}
